package com.itheima.reggie.servrce.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.reggie.dto.DishDto;
import com.itheima.reggie.entity.Dish;
import com.itheima.reggie.entity.DishFlavor;
import com.itheima.reggie.mapper.DishMapper;
import com.itheima.reggie.servrce.DishFlavorService;
import com.itheima.reggie.servrce.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Slf4j
@Service
public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {
    @Autowired
    private DishFlavorService dishFlavorService;
    @Override
    @Transactional
    public void saveDishAndFlavor(DishDto dishDto) {
        //1:保存菜品基本信息
        //添加没有做之前是不是还没有 菜品id呢
//        Dish dish = new Dish();
//        dish.setName(dishDto.getName());
        //.....
        // 完全没有必要  Dish是爹   DishDto是儿子
        // d爹是不是 可以接收儿子
        save(dishDto);// 存到 dish表里面数据了
        // save(Dish ) 可以传 Dish的儿子
        // 保存完了 是不是就有id了?  内置了主键id回显
        Long dishId = dishDto.getId();
        log.info("查看添加的菜品之后菜品id"+dishId);
        //保存 菜品口味信息
        //问菜品口味信息在哪？
        List<DishFlavor> flavors = dishDto.getFlavors();
        //有多个口味信息
        //一个口味必定属于 一个菜品
        //遍历每个口味 添加上它所属的菜品id信息
        //这些口味信息 是不是属于 刚刚生成的 菜品口味
        for (DishFlavor flavor:flavors){
            flavor.setDishId(dishId);
        }
        dishFlavorService.saveBatch(flavors);
    }

    @Override
    public DishDto getByIdWithFlavor(Long id) {
        DishDto dishDto = new DishDto();
//        Dish dish= super.getById(id);
        Dish dish = getById(id);
        BeanUtils.copyProperties(dish,dishDto);
        LambdaQueryWrapper<DishFlavor> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DishFlavor::getDishId,id);
        List<DishFlavor> dishFlavors = dishFlavorService.list();
        dishDto.setFlavors(dishFlavors);

        return dishDto;
    }

    /**
     * 根据 菜品id 更新菜品表 和口味表
     *
     */


    @Override
    @Transactional
    public void updateWithFlavor(DishDto dishDto) {
        // 更新菜品表的语句  update dish set.... where id = ?
        // 这个语句对应的方法
        // 更新菜品
        updateById(dishDto);//要的 Dish 可以传dishDto
        // 更新口味
        // 1:把这个 菜品id 相关的 口味全部删除
        Long dishId = dishDto.getId();
        LambdaQueryWrapper<DishFlavor> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DishFlavor::getDishId,dishId);
        dishFlavorService.remove(wrapper);
        // 再添加
        //新的口味信息
        List<DishFlavor> flavors = dishDto.getFlavors();
        for (DishFlavor flavor : flavors){
            flavor.setDishId(dishId);
        }
        dishFlavorService.saveBatch(flavors);
    }
}
